package com.panda.ziwei.utils;

import java.util.Calendar;

public class DateUtil {


    /**
     * 真太阳和平太阳时差计算方法：
     * Δt = 0.0028 - 1.9857sinθ + 9.9059sin2θ - 7.0924cosθ - 0.6882cos2θ
     * 其中Δt为时差；θ为日角（弧度）；
     * θ = 2πt / 365.2422
     * 其中
     * t = N - N0
     * N为积日， [2]  年积日是仅在一年中使用的连续计算日期的方法，是从当年1月1日起开始计算的天数。
     * 例如：每年的1月1日为第1日，2月1日为第32日，以此类推。平年的12月31日为第365日，闰年的12月31日为第366日。
     * N0=K+0.2422×（年份-标准年）-INT（0.25×（年份-标准年））；
     * 这里采用1985年为标准年。
     * 即N0=79.6764+0.2422×（year-1985）-INT（0.25×（year-1985））
     * @param year
     * @param dayOfYear
     */
    public static void computeTrueSunTime(int year, int dayOfYear) {

        int N = dayOfYear;
        double N0 = 79.6764 + 0.2422 * (year - 1985) - ((int) (0.25 * (year - 1985)));
        double t = N - N0;
        double theta = 2 * Math.PI * t / 365.2422;
        double deltaT = 0.0028 - 1.9857 * Math.sin(theta) + 9.9059 * Math.sin(2 * theta) - 7.0924 * Math.cos(theta) - 0.6882 * Math.cos(2 * theta);
        System.out.println(deltaT);
    }

    public static void main(String[] args) {
        Calendar calendar = Calendar.getInstance();
        calendar.set(2022, 4, 27, 0, 0, 0);
        computeTrueSunTime(2022, calendar.get(Calendar.DAY_OF_YEAR));
    }

}
